package org.xyq.singleton.lazy;

/**
 * @author xuyanqing
 * @description 2.单例模式-懒汉式（线程安全-同步方法）
 * <p>
 * 原理
 * 通过在 getInstance() 方法上加 synchronized 关键字，保证同一时刻只有一个线程进入该方法，从而确保只创建一个实例。
 * <p>
 * 优缺点
 * 优点：
 * 实现简单，能够保证线程安全。
 * 缺点：
 * 整个方法加锁，每次调用都需要同步，降低了性能（尽管实例只创建一次，但每次访问都涉及同步开销）。
 * @date 2025-02-14 15:33
 * @creed where there is a will,there is a way. yx
 */

public class ThreadSafeSynchronized {
    private static ThreadSafeSynchronized instance;

    private ThreadSafeSynchronized() {
    }

    public static synchronized ThreadSafeSynchronized getInstance() {
        if (instance == null) {
            instance = new ThreadSafeSynchronized();
        }
        return instance;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(() -> {
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                ThreadSafeSynchronized.getInstance();
            }).start();
        }
    }
}
